package frsf.cidisi.exercise.tp1.search;

import frsf.cidisi.exercise.tp1.interfaz.ControlSimulacion;
import frsf.cidisi.exercise.tp1.utiles.MetodosUtiles;
import frsf.cidisi.faia.agent.search.GoalTest;
import frsf.cidisi.faia.state.AgentState;

public class ObjetivoArqueologo extends GoalTest {

	private int posicionDeseada;
	private double pesoMaximoAcoplado;
	private double porcentajeMinimoDeCarga;
	private double pesoPorUnidadOro;
	private double pesoPorUnidadRubi;
	private double pesoPorUnidadAnillo;
	private double pesoPorUnidadDiamante;
	private double pesoPorUnidadColgante;
	
	MetodosUtiles metodosUtiles = new MetodosUtiles();

	
//	private ConectorLog log = new ConectorLog();
	
    @Override
    public boolean isGoalState (AgentState agentState) {
    
  
    	
    	//TODO: Borrar
//    	System.out.println("Testeando objetivo: Posicion Agente -> "+((EstadoActualArqueologo)agentState).getPosicionAgente()+" Posicion Deseada -> "+posicionDeseada);
    	
    	EstadoActualArqueologo auxAgentState = ((EstadoActualArqueologo)agentState);
    	int posicionAgente = auxAgentState.getPosicionAgente();
    	
    	
        if  ((posicionAgente == posicionDeseada)
        	&& ((  metodosUtiles.calcularPeso(auxAgentState .getTesorosAcoplado()) >pesoMaximoAcoplado*porcentajeMinimoDeCarga)
        	|| (!metodosUtiles.ObtenerFaltante(pesoMaximoAcoplado*porcentajeMinimoDeCarga- metodosUtiles.calcularPeso(auxAgentState .getTesorosAcoplado()) ,auxAgentState))))
        	{
        	
        	//TODO: Borrar
//        	System.out.println(auxAgentState+" Peso: "+calcularPeso(auxAgentState.getTesorosAcoplado()));
            return true;
        	}
        return false;
       
	}

	public int getPosicionDeseada() {
		return posicionDeseada;
	}

	public void setPosicionDeseada(int posicionDeseada) {
		this.posicionDeseada = posicionDeseada;
	}

	public double getPesoMaximoAcoplado() {
		return pesoMaximoAcoplado;
	}

	public void setPesoMaximoAcoplado(double pesoMaximoAcoplado) {
		this.pesoMaximoAcoplado = pesoMaximoAcoplado;
	}

	public double getPorcentajeMinimoDeCarga() {
		return porcentajeMinimoDeCarga;
	}

	public void setPorcentajeMinimoDeCarga(double porcentajeMinimoDeCarga) {
		this.porcentajeMinimoDeCarga = porcentajeMinimoDeCarga;
	}

	public double getPesoPorUnidadOro() {
		return pesoPorUnidadOro;
	}

	public void setPesoPorUnidadOro(double pesoPorUnidadOro) {
		this.pesoPorUnidadOro = pesoPorUnidadOro;
	}

	public double getPesoPorUnidadRubi() {
		return pesoPorUnidadRubi;
	}

	public void setPesoPorUnidadRubi(double pesoPorUnidadRubi) {
		this.pesoPorUnidadRubi = pesoPorUnidadRubi;
	}

	public double getPesoPorUnidadAnillo() {
		return pesoPorUnidadAnillo;
	}

	public void setPesoPorUnidadAnillo(double pesoPorUnidadAnillo) {
		this.pesoPorUnidadAnillo = pesoPorUnidadAnillo;
	}

	public double getPesoPorUnidadDiamante() {
		return pesoPorUnidadDiamante;
	}

	public void setPesoPorUnidadDiamante(double pesoPorUnidadDiamante) {
		this.pesoPorUnidadDiamante = pesoPorUnidadDiamante;
	}

	public double getPesoPorUnidadColgante() {
		return pesoPorUnidadColgante;
	}

	public void setPesoPorUnidadColgante(double pesoPorUnidadColgante) {
		this.pesoPorUnidadColgante = pesoPorUnidadColgante;
	}

	public MetodosUtiles getMetodosUtiles() {
		return metodosUtiles;
	}

	public void setMetodosUtiles(MetodosUtiles metodosUtiles) {
		this.metodosUtiles = metodosUtiles;
	}


//	public void setLog(ConectorLog log) {
//		this.log = log;
//	}
//
//	public ConectorLog getLog() {
//		return log;
//	}
    
    
}